package qu.sol2bpel.protocol;

import org.antlr.v4.runtime.misc.NotNull;

import qu.sol2bpel.sol.grammar.SOL_DeclarativeBaseListener;
import qu.sol2bpel.sol.grammar.SOL_DeclarativeParser;

public class ProtocolDeclarationListener extends SOL_DeclarativeBaseListener {

	private Protocol protocol;

	
	public ProtocolDeclarationListener()
	{
		protocol = new Protocol();
	}
	public Protocol getProtocol() {
		return protocol;
	}

	public void setProtocol(Protocol protocol) {
		this.protocol = protocol;
	}

	@Override public void exitParty_line_decl(@NotNull SOL_DeclarativeParser.Party_line_declContext ctx) 
	{
	//	System.out.println(ctx.PARTY());
		if(ctx.PARTY().getText().equals("Client")) 
			protocol.setClient(ctx.ID(0).getText());
		else if (ctx.PARTY().getText().equals("Cloud")) 
		{
			for(int i=0 ; i< ctx.ID().size(); i++)
				protocol.getCloud_parties().add(ctx.ID(i).getText());
		}
	}

	@Override public void exitVar_line_decl(@NotNull SOL_DeclarativeParser.Var_line_declContext ctx)
	{
		//for(int i=0 ; i< ctx.var_list().ID().size(); i++)
			
			//protocol.getInputs().add(ctx.var_list().ID(i).getText());
		
	}
	@Override public void exitInput_decl(@NotNull SOL_DeclarativeParser.Input_declContext ctx) 
	{
		for(int i=0 ; i< ctx.var_list().ID().size(); i++)
			protocol.getInputs().add(ctx.var_list().ID(i).getText());
	}

	@Override public void exitOutput_decl(@NotNull SOL_DeclarativeParser.Output_declContext ctx) 
	{
		for(int i=0 ; i< ctx.var_list().ID().size(); i++)
			protocol.getOutputs().add(ctx.var_list().ID(i).getText());
	}

	@Override public void exitFunction_decl(@NotNull SOL_DeclarativeParser.Function_declContext ctx)
	{
		for(int i=0 ; i< ctx.ID().size(); i+=2)
			protocol.getParties_functions().map(ctx.ID(i).getText(),ctx.ID(i+1).getText());
	}

	@Override public void exitDeny_clause(@NotNull SOL_DeclarativeParser.Deny_clauseContext ctx) 
	{
		for (int i = 0; i < ctx.var_list().ID().size() ; i++)
			protocol.getParties_denys().map(ctx.ID().getText(), ctx.var_list().ID(i).getText());
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
